#include "GUIFont_Create.h"

/* 存储器初始化标志 */
static uint8_t storage_init_flag = 0;

/* 字库结构体 */
GUI_XBF_DATA 	XBF_YAHEI_36_Data;
GUI_FONT     	FONT_YAHEI_36;

GUI_XBF_DATA 	XBF_YAHEI_41_Data;
GUI_FONT     	FONT_YAHEI_41;


extern FATFS fs;//逻辑磁盘工作区.
static FRESULT font_res; 
static UINT br;            				/* File R/W count */
static FIL font_fnew;

static const char FONT_STORAGE_ROOT_DIR[]  =   "1:";
static const char FONT_YAHEI_36_ADDR[] = 	 "1:/font/Font_36.xbf";
static const char FONT_YAHEI_41_ADDR[] = "1:/font/Font_41.xbf";

/**
  * @brief  获取字体数据的回调函数
  * @param  Offset：要读取的内容在XBF文件中的偏移位置
  * @param  NumBytes：要读取的字节数
	* @param  pVoid：自定义数据的指针
  * @param  pBuffer：存储读取内容的指针
  * @retval 0 成功, 1 失败
  */
static int _cb_FONT_XBF_GetData(U32 Offset, U16 NumBytes, void * pVoid, void * pBuffer)
{	
	/* 从pVoid中获取字库的存储地址(pvoid的值在GUI_XBF_CreateFont中传入) */
	font_res = f_open(&font_fnew , (char *)pVoid, FA_OPEN_EXISTING | FA_READ);

	if (font_res == FR_OK) 
	{
		f_lseek (&font_fnew, Offset);/* 指针偏移 */
		/* 读取内容 */
		font_res = f_read( &font_fnew, pBuffer, NumBytes, &br );		 
		f_close(&font_fnew);
		return 0;  
	}    
	else
	  return 1; 
}


/**
  * @brief  创建XBF字体
  * @param  无
  * @retval 无
  */
void Create_XBF_Font(void) 
{
	/* 新宋体18 */
	GUI_XBF_CreateFont(&FONT_YAHEI_36,              /* GUI_FONT 字体结构体指针 */
					           &XBF_YAHEI_36_Data,          /* GUI_XBF_DATA 结构体指针 */
					           GUI_XBF_TYPE_PROP_EXT,           /* 字体类型 */
					           _cb_FONT_XBF_GetData,            /* 获取字体数据的回调函数 */
					           (void *)&FONT_YAHEI_36_ADDR);/* 要传输给回调函数的自定义数据指针，此处传输字库的地址 */
	/* 思源黑体36 */
	GUI_XBF_CreateFont(&FONT_YAHEI_41,              /* GUI_FONT 字体结构体指针 */
					           &XBF_YAHEI_41_Data,          /* GUI_XBF_DATA 结构体指针 */
					           GUI_XBF_TYPE_PROP_AA2_EXT,           /* 字体类型 */
					           _cb_FONT_XBF_GetData,            /* 获取字体数据的回调函数 */
					           (void *)&FONT_YAHEI_41_ADDR);/* 要传输给回调函数的自定义数据指针，此处传输字库的地址 */
}
